博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
flask蓝图
阅读量:5038 次
发布时间:2019-06-12

本文共 6628 字,大约阅读时间需要 22 分钟。

1.概念

  蓝图可以使我们的程序更加模块化,不同功能的路由可以放在不同的模块下,最后集中到启动类中

  它的作用就是将功能和主服务分开,类似django中我们创建的每一个app

 2.蓝图常见架构方式

2.1 功能式架构    

  按照每部分的功能来组织应用,模板放在同一文件夹,视图存放同一文件夹

yourapp/    __init__.py    static/    templates/        home/        control_panel/        admin/    views/        __init__.py        home.py        control_panel.py        admin.py    models.py

 视图文件中的除了__init__.py,每一个文件都是一个了蓝图

所有的蓝图通过顶级的__init__.py注册到Flask()

2.2 分区式架构

  按照每一部分所属的蓝图来组织应用,管理面板的所有的模板,视图和静态文件放在一个文件夹中,用户控制面板的则放在另一个文件夹中

yourapp/    __init__.py    admin/        __init__.py        views.py        static/        templates/    home/        __init__.py        views.py        static/        templates/    control_panel/        __init__.py        views.py        static/        templates/    models.py

参考来源出处:

2.3 蓝图标准目录结构及用法

__init__.py

from flask import Flaskfrom lastday.views.account import accountfrom lastday.views.user import userdef create_app():    """    创建app应用    :return:    """    app = Flask(__name__)    # 引入配置文件并应用    app.config.from_object("settings.Development")    app.register_blueprint(account)    app.register_blueprint(user)    # @app.before_request    # def b1():    #     print('b1')    #    #   b1 = app.before_request(b1)    app.before_request(b1)  # app请求之前的中间件    return appdef b1():    print('app_b1')

views/account.py

from flask import Blueprintaccount = Blueprint('account',__name__)@account.before_requestdef bb():    print('account.bb')@account.route('/login')def login():    return '登陆'

views/user.py

from flask import Blueprint,render_templateuser = Blueprint('user',__name__)@user.route('/user_list')def user_list():    return render_template('user_list.html')

templates/user_list.html

    
Title

用户列表

...
View Code

manage.py

from lastday import create_appapp = create_app()if __name__ == '__main__':    app.run()

setting.py

class Base(object):    SECRET_KEY = "fasdfasdf"class Product(Base):    passclass Testing(Base):    DEBUG = Falseclass Development(Base):    DEBUG = True

输入http://127.0.0.1:5000/login,终端打印:

输入http://127.0.0.1:5000/user_list,终端打印:

3. web应用搭建

实现基本的增删改查

目录结构

data.py

STUDENT = [    {
"id":1,"name":"小a","age":"18"}, {
"id":2,"name":"小b","age":"38"}, {
"id":3,"name":"小c","age":"66"},]

 manage.py

from student import create_appapp = create_app()if __name__ == "__main__":    app.run(port=5051,debug=True)

__init__.py 

from flask import Flaskfrom views import selectfrom views import addfrom views import updatefrom views import delsdef create_app():    app = Flask(__name__)    app.register_blueprint(select.my_list)    app.register_blueprint(add.my_add)    app.register_blueprint(update.my_update)    app.register_blueprint(dels.my_del)    return app

selsect.py

from flask import Blueprintfrom flask import render_templatefrom data import STUDENTmy_list = Blueprint("my",__name__,template_folder="../templates")@my_list.route("/list")def lists():    return render_template("list.html", student=STUDENT)

list.html

    
Title
{% for foo in student %}
{% endfor %}
id name age options
{
{ foo.id }}
{
{ foo["name"] }}
{
{ foo["age"] }}
修改|删除
View Code

add.py

from flask import Blueprintfrom flask import requestfrom flask import render_templatefrom data import STUDENTmy_add = Blueprint("add",__name__,template_folder="../templates")@my_add.route("/add",methods=["GET","POST"])def adds():    if request.method == "POST":        add_dic = {            "id": request.form["id"],            "name": request.form["name"],            "age": request.form["age"],        }        STUDENT.append(add_dic)        return render_template("add.html")

add.html

    
Title
id:
姓名:
年龄:
View Code

update.py

#!/usr/bin/env python    # -*- coding:utf-8 -*-# author: Learning       time:2018/9/7from flask import Blueprintfrom flask import request,redirectfrom flask import render_templatefrom data import STUDENTmy_update = Blueprint("my_update",__name__,template_folder="../templates")@my_update.route("/update/
",methods=["GET","POST"])def updates(nid): if request.method == "POST": ids = int(request.form["id"]) add_dic = { "id": ids, "name": request.form["name"], "age": request.form["age"], } for index,dicts in enumerate(STUDENT): if dicts["id"] == ids: STUDENT[index] = add_dic return redirect("/list") # 首次访问,get请求 for dic in STUDENT: if dic["id"] == nid: return render_template("update.html", student=dic) return render_template("update.html", student=" ")

update.html

    
Title
姓名:
年龄:
View Code

dels.py

from flask import Blueprintfrom flask import redirectfrom data import STUDENTmy_del = Blueprint("my_del",__name__,template_folder="../templates")@my_del.route("/del/
",methods=["GET","POST"])def dels(nid): for dic in STUDENT: if dic["id"] == nid: STUDENT.remove(dic) return redirect("/list")

效果:

 4.总结

1.Flask路由    1.endpoint="user" # 反向url地址    2.url_address = url_for("user")    3.methods = ["GET","POST"] # 允许请求进入视图函数的方式    4.redirect_to # 在进入视图函数之前重定向    5./index/
# 动态参数路由
def index(nid) 6.strict_slashes # 是否严格要求路由地址 / 7.defaults={
"nid":1} # def index(nid)2.Flask初始化配置(实例化): 1.template_folder # 指定模板路径 2.static_url_path # 指定静态文件目录的URL地址 3.static_folder # 指定静态文件目录路径3.Flask对象配置 1.DEBUG #开发模式的调试功能 True False 2.app.config.from_object(class) # 通过对象的方式导入配置 3.secret_key # 开启session功能的时候需要添加的配置4.Blueprint 1.将功能和主程序分离,注册 2.bl = Blueprint("dongdong",__name__) 3.注册 register_blueprint(bl) 5.send_file jsonify 1.send_file # 打开并返回文件 content-type:文件类型 2.jsonify # 将一个字符串 转为JSON格式 加入 content-type:application/json 头 6.特殊的装饰器: 1.before_request # 在请求进入视图函数之前执行的函数(登录认证) 2.after_request # 在请求响应回浏览器之前执行的函数 3.before_first_request # 在第一次请求进入视图函数之前执行的函数 4.errorheader(404) # 当遇到此类错误响应的时候(自定义错误页面)7.flash 1.flash("msg","tag") # 闪现存储 2.get_flashed_messages(category_filter=["tag"]) # 闪现取值 只要用到了get_flashed_messages就一定清空flash

 

详细介绍可参考链接:

转载于:https://www.cnblogs.com/LearningOnline/p/9601911.html

你可能感兴趣的文章
Javascript 时间与日期的相关属性方法【转】
查看>>
GridView
查看>>
【基本知识】FMS有限状态机设计
查看>>
尽情来吧 2013-6 (写于爸爸走之后,之四)
查看>>
IText生成PDF(入门)
查看>>
一张图看懂LiveGBS(国标流媒体GB28181)与LiveQing的关系
查看>>
贪婪和恐惧
查看>>
数据库之 :分页技术:之点击一次取一次数据
查看>>
JavaScript
查看>>
VS2008开发Windows Mobile6环境搭建及模拟器联网问题图解
查看>>
V2019 Super DSP3 Odometer Correction Vehicle List
查看>>
Python 3.X 练习集100题 05
查看>>
4sumii
查看>>
手写API接口测试使用的两个函数
查看>>
canvas
查看>>
实验三观后感
查看>>
Java系列学习(零)-写在前面的话
查看>>
Python模块
查看>>
”win7笔记本共享无线网络,手机连接成功却无法上网“的解决之道【亲身经历】...
查看>>
今时不同往日:VS2010十大绝技让VS6叹服
查看>>